跳到主要内容

使用 docker-compose 管理 MongoDB 服务

初始化

首先,我们新建以下目录结构:

mongo
├── docker-compose.yml
└── mongo-init.js

在接下来会使用到 mongo 镜像,如果没有特殊的版本要求,我们可以先拉取最新的镜像:docker pull mongo:latest

一个完整的 docker-compose.yml 大概如下面这样:

version: '3.7'
services:
mongodb_container:
container_name: service-mongo
image: mongo:latest
environment:
MONGO_INITDB_DATABASE: 默认的数据库
MONGO_INITDB_ROOT_USERNAME: 管理员用户名
MONGO_INITDB_ROOT_PASSWORD: 管理员密码
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro

当填写好本地的配置信息以后,使用:docker-compose up -d 即可。

用户与权限初始化脚本文件的创建

其中 mongo-init.js 主要用于在创建 MongoDB 容器服务时对数据库于相关账号权限进行初始化,示例配置如下:

db.createUser({
user: 'test',
pwd: 'test',
roles: [
{
role: 'readWrite',
db: 'test',
},
],
});

docker-compose 文件配置

以下是一个 docker-compose.yml 配置的示例文件与说明:

version: '3.7'
services:
mongodb_container:
container_name: service-mongo
image: mongo:latest
environment:
MONGO_INITDB_DATABASE:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: rootroot
ports:
- 27017:27017
volumes:
- ./mongodb:/data/db
- ./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro

配置字段说明:

  • 27017:27017 ,将容器内的27017 映射到本地的 27017 端口,这样我们就可以方便地访问容器内的 MongoDB 服务
  • MONGO_INITDB_ROOT_USERNAME / MONGO_INITDB_ROOT_PASSWORD,管理员账号与密码
  • ./mongodb:/data/db ,将容器中的 db 文件夹挂载到当前目录下,这样方便我们做持久化
  • ./mongo-init.js:/docker-entrypoint-initdb.d/mongo_init.js:ro ,将 mongo-init.js 文件作为初始化脚本文件执行

执行

在 mongo 文件夹内,通过 docker-compose up -d 即可启动该服务,一切就绪后,我们对当前使用的数据库进行测试连通性: